const express = require('express');
const router = express.Router();
const {
  addUser,
  addTrafficUser,
  getUserByUsername,
  getAllUser,
  searchUserLike,
  updateUserById,
  updateUserStatus,
  deleteUserByUsername,
  validateUser,
} = require('../service/UserService.js');

// 登录用户,验证用户名、密码和角色状态码是否匹配
router.post('/login', async (req, res) => {
  const { username, password, roleCode } = req.body;
  const user = await validateUser(username, password, roleCode);
  if (user) {
    //方式一
    // res.header('Set-Cookie', `token=${user.id}; path=/; domain=localhost; max-age=3600,httponly=false`); // 存储用户信息到 cookie
    //方式二
    //httpOnly: false 意味着 Cookie 可以被 JavaScript 访问,如果不需要在前端访问 Cookie，可以将其设置为 true 以提高安全性。
    //sameSite 设置：sameSite: 'Strict' 表示只有在同源请求时才会发送 cookie。对于跨域访问，可以考虑使用 sameSite: 'Lax'。
    res.cookie('token', user.id, { path: '/', domain: 'localhost', maxAge: 3600000, httpOnly: false, sameSite: 'Lax' }); // 存储用户信息到 cookie
    //改变用户状态为在线
    await updateUserStatus(username, '在线中');
    res.send({ success: true, message: '登录成功' });
    console.log('登录成功');
  } else {
    res.status(401).send({ success: false, message: '用户名或密码错误' });
    console.log('用户名或密码错误');
  }
});

// 注册普通用户,新增用户信息
router.post('/register', async (req, res) => {
  const { username, password } = req.body;

  // 如果用户名或密码为空，则返回提示信息
  if (!username) {
    return res.status(400).json({ success: false, message: '用户名不能为空' });
  }
  if (!password) {
    return res.status(400).json({ success: false, message: '密码不能为空' });
  }

  // 如果用户名已存在，则返回提示信息
  const findUsername = await getUserByUsername(username);
  if (findUsername) {
    return res.status(400).json({ success: false, message: '用户名已存在,请重新输入' });
  }

  try {
    const result = await addUser(username, password);
    console.log(result);
    if (result) {
      res.json({ success: true, message: '注册成功' });
    } else {
      res.status(Ⅰ00).json({ success: false, message: '注册失败' });
    }
  } catch (error) {
    console.error('注册用户时发生错误:', error);
    res.status(500).json({ success: false, message: '内部服务器错误' });
  }
});

// 登出用户，即下线用户
router.post('/logout', async (req, res) => {
  console.log('Request body:', req.body);
  const { username } = req.body;
  // console.log(username);

  try {
    // 更新用户状态为离线
    const updateResult = await updateUserStatus(username, '离线');
    console.log('更新用户状态结果:', updateResult); // 打印更新结果

    if (updateResult === '更新成功') {
      // 清除 cookie 中的用户信息
      res.clearCookie('token');
      console.log('登出成功');
      res.send({ success: true, message: '登出成功' });
    } else {
      console.error('更新用户状态失败:', updateResult);
      res.status(400).send({ success: false, message: '更新用户状态失败' });
    }
  } catch (error) {
    console.error('登出失败:', error);
    res.status(500).send({ success: false, message: '登出失败，请稍后再试' });
  }
});

// // 管理员用户管理界面--新增交通部门用户
router.post('/userManage/addTrafficUser', async (req, res) => {
  const { username, password } = req.body;
  //如果用户名已存在，则返回提示信息
  const findUsername = await getUserByUsername(username);
  if (findUsername) {
    return res.status(400).send('用户名已存在,请重新输入');
  } else {
    const result = await addTrafficUser(username, password);
    console.log(result);
    if (result) {
      res.send('新增交通部门用户成功');
    } else {
      res.status(400).send('新增交通部门用户失败');
    }
  }
});

//管理员用户管理界面--更新用户信息
router.put('/userManage/update', async (req, res) => {
  const { username, password, userId } = req.body;
  const findUsername = await getUserByUsername(username);
  if (findUsername) {
    return res.status(400).send('用户名已存在,请重新输入');
  }
  const result = await updateUserById(userId, username, password);
  console.log(result);
  if (result) {
    res.send('更新用户信息成功');
  } else {
    res.status(400).send('更新用户信息失败');
  }
});

//根据用户名获取用户信息
router.get('/getUserByUsername', async (req, res) => {
  const { username } = req.query;
  const result = await getUserByUsername(username);
  console.log(result);
  if (result) {
    res.send(result);
  } else {
    res.status(400).send('查询失败');
  }
});

// 获取所有用户
router.get('/getAll', async (req, res) => {
  const result = await getAllUser();
  console.log(result);
  res.send(result);
});

// ////根据搜索关键字进行模糊查询
router.get('/searchUserLike', async (req, res) => {
  const { keyword } = req.query;

  try {
    const result = await searchUserLike(keyword);
    console.log(result);

    if (result && result.length > 0) {
      res.send(result);
    } else {
      res.status(400).send('没有这个用户,请重新输入');
    }
  } catch (error) {
    console.error('搜索用户时发生错误:', error);
    res.status(500).send('服务器内部错误');
  }
});

//管理员用户管理界面--注销用户,即删除用户信息
router.delete('/userManage/cancel', async (req, res) => {
  const { username } = req.body;
  const result = await deleteUserByUsername(username);
  if (result) {
    // 清除 cookie 中的用户信息
    // res.clearCookie('token');
    res.send({ success: true, message: '注销成功' });
  } else {
    res.status(400).send('注销失败,请稍后再试');
  }
});

// 导出路由器实例
module.exports = router;
